package com.snj.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main2 {
    public static void main(String[] args) {
        Integer start = 5;
        Integer end = 13;
        // 示例的 intList
        List<List<Integer>> intList = new ArrayList<>();
        intList.add(new ArrayList<>(Arrays.asList(4, 4, 4, 1, 6)));
        intList.add(new ArrayList<>(Arrays.asList(3, 13, 13)));

        List<List<Integer>> result = countPersonFlag(end, intList);

        List<List<Integer>> sumTest = countSumFlag(end, intList);
        System.out.println(result);  // 输出结果
        System.out.println(sumTest);  // 输出结果


        Integer num = start / 2;  // 自动向下取整


        List<List<Integer>> sumList = new ArrayList<>();

        for (int i = 0; i < sumTest.size(); i++) {
            for (int j = 0; j < sumTest.get(i).size(); j++) {
                Integer temp = sumTest.get(i).get(j);
                if (temp <= num) {
                    if (j == 0) {
                        // 为 0 加到 下一次上
                        // 如果只有 一个 就将其 等于最小
                        if (j + 1 > sumTest.get(i).size()) {
                            sumTest.get(i).set(j, start);
                        } else {
                            result.get(i).set(j + 1, result.get(i).get(j) + 1);
                            result.get(i).remove(j);
                            sumTest.get(i).remove(j);
                        }
                    } else {
                        // 不为 0 加到上一次
                        result.get(i).set(j - 1, result.get(i).get(j - 1) + 1);
                        result.get(i).remove(j);
                        sumTest.get(i).remove(j);
                    }
                } else if (temp < start) {
                    sumTest.get(i).set(j, start);
                } else {
                    boolean oddFlag = isOdd(sumTest.get(i).get(j));
                    if (!oddFlag) {
                        sumTest.get(i).set(j, temp + 1);
                    }
                }
            }
        }

        System.out.println(result);  // 输出结果
        System.out.println(sumTest);  // 输出结果

    }

    public static boolean isOdd(int number) {
        return number % 2 != 0;
    }

    public static List<List<Integer>> countPersonFlag(Integer end, List<List<Integer>> intList) {
        List<List<Integer>> result = new ArrayList<>();

        for (List<Integer> list : intList) {
            Integer sum = 0;
            int indexFlag = 1;
            List<Integer> indices = new ArrayList<>();
            for (int i = 0; i < list.size(); i++) {
                sum += list.get(i);
                if (sum >= end || (i < list.size() - 1 && sum + list.get(i + 1) > end)) {
                    // 记录当前索引 + 1
                    indices.add(i + 1);
                    // 将 sum 归零
                    sum = 0;
                }
            }
            if (sum > 0) {
                // 如果循环结束时 sum 还有值，记录最后一个索引
                indices.add(list.size());
            }
            result.add(indices);
        }
        return result;
    }


    public static List<List<Integer>> countSumFlag(Integer end, List<List<Integer>> intList) {
        List<List<Integer>> valuesResult = new ArrayList<>();
        for (List<Integer> list : intList) {
            Integer sum = 0;
            List<Integer> values = new ArrayList<>();
            for (int i = 0; i < list.size(); i++) {
                sum += list.get(i);
                if (sum >= end || (i < list.size() - 1 && sum + list.get(i + 1) > end)) {
                    // 记录当前的累加值
                    values.add(sum);
                    sum = 0;
                }
            }
            if (sum > 0) {
                // 记录最后一个累加值
                values.add(sum);
            }
            valuesResult.add(values);
        }
        return valuesResult;
    }
}

